package com.gzhryc.pay.adaptation.weixin.msg.transfer;

import java.io.Serializable;

/**
 * 微信转账查询响应
 * 参考文献
 * https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_3.shtml
 */
public class WXPayTransferMoneyOrderResponse implements Serializable {

    private String code;            //错误时返回
    private String message;         //错误时返回

    private String mchid;           //商户号，必填
    private String out_batch_no;    //商家批次单号，必填
    private String batch_id;        //微信批次单号，必填
    private String appid;           //直连商户的appid，必填
    private String out_detail_no;   //商家明细单号，必填
    private String detail_id;       //微信明细单号，必填
    /**
     * 枚举值：
     * PROCESSING:转账中。正在处理中，转账结果尚未明确
     * SUCCESS:转账成功
     * FAIL:转账失败。需要确认失败原因后，再决定是否重新发起对该笔明细单的转账（并非整个转账批次单）
     */
    private String detail_status;    //明细状态，必填
    private Integer transfer_amount;    //转账金额，必填
    private String transfer_remark;     //转账备注，必填
    /**
     * 如果转账失败则有失败原因
     * ACCOUNT_FROZEN：账户冻结
     * REAL_NAME_CHECK_FAIL：用户未实名
     * NAME_NOT_CORRECT：用户姓名校验失败
     * OPENID_INVALID：Openid校验失败
     * TRANSFER_QUOTA_EXCEED：超过用户单笔收款额度
     * DAY_RECEIVED_QUOTA_EXCEED：超过用户单日收款额度
     * MONTH_RECEIVED_QUOTA_EXCEED：超过用户单月收款额度
     * DAY_RECEIVED_COUNT_EXCEED：超过用户单日收款次数
     * PRODUCT_AUTH_CHECK_FAIL：产品权限校验失败
     * OVERDUE_CLOSE：转账关闭
     * ID_CARD_NOT_CORRECT：用户身份证校验失败
     * ACCOUNT_NOT_EXIST：用户账户不存在
     * TRANSFER_RISK：转账存在风险
     * REALNAME_ACCOUNT_RECEIVED_QUOTA_EXCEED：用户账户收款受限，请引导用户在微信支付查看详情
     * RECEIVE_ACCOUNT_NOT_PERMMIT：未配置该用户为转账收款人
     * PAYER_ACCOUNT_ABNORMAL：商户账户付款受限，可前往商户平台-违约记录获取解除功能限制指引
     * PAYEE_ACCOUNT_ABNORMAL：用户账户收款异常，请引导用户完善其在微信支付的身份信息以继续收款
     */
    private String fail_reason;         //明细失败原因
    private String openid;              //用户在直连商户应用下的用户标示，必填
    /**
     * 1、商户转账时传入了收款用户姓名、查询时会返回收款用户姓名；
     * 2、收款方姓名采用标准RSA算法，公钥由微信侧提供
     * 3、该字段需进行加密处理，加密方法详见敏感信息加密说明。(提醒：必须在HTTP头中上送Wechatpay-Serial)
     */
    private String user_name;           //收款用户姓名
    private String initiate_time;       //转账发起时间，必填
    private String update_time;         //明细更新时间，必填

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMchid() {
        return mchid;
    }

    public void setMchid(String mchid) {
        this.mchid = mchid;
    }

    public String getOut_batch_no() {
        return out_batch_no;
    }

    public void setOut_batch_no(String out_batch_no) {
        this.out_batch_no = out_batch_no;
    }

    public String getBatch_id() {
        return batch_id;
    }

    public void setBatch_id(String batch_id) {
        this.batch_id = batch_id;
    }

    public String getAppid() {
        return appid;
    }

    public void setAppid(String appid) {
        this.appid = appid;
    }

    public String getOut_detail_no() {
        return out_detail_no;
    }

    public void setOut_detail_no(String out_detail_no) {
        this.out_detail_no = out_detail_no;
    }

    public String getDetail_id() {
        return detail_id;
    }

    public void setDetail_id(String detail_id) {
        this.detail_id = detail_id;
    }

    public String getDetail_status() {
        return detail_status;
    }

    public void setDetail_status(String detail_status) {
        this.detail_status = detail_status;
    }

    public Integer getTransfer_amount() {
        return transfer_amount;
    }

    public void setTransfer_amount(Integer transfer_amount) {
        this.transfer_amount = transfer_amount;
    }

    public String getTransfer_remark() {
        return transfer_remark;
    }

    public void setTransfer_remark(String transfer_remark) {
        this.transfer_remark = transfer_remark;
    }

    public String getFail_reason() {
        return fail_reason;
    }

    public void setFail_reason(String fail_reason) {
        this.fail_reason = fail_reason;
    }

    public String getOpenid() {
        return openid;
    }

    public void setOpenid(String openid) {
        this.openid = openid;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getInitiate_time() {
        return initiate_time;
    }

    public void setInitiate_time(String initiate_time) {
        this.initiate_time = initiate_time;
    }

    public String getUpdate_time() {
        return update_time;
    }

    public void setUpdate_time(String update_time) {
        this.update_time = update_time;
    }
}
